package org.springblade.modules.repair.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.AllArgsConstructor;
import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.tool.api.R;
import org.springblade.modules.repair.dto.PlanAbarbeitungSearchDTO;
import org.springblade.modules.repair.entity.MaintainAbarbeitungDetail;
import org.springblade.modules.repair.entity.MaintainAbarbeitungRecord;
import org.springblade.modules.repair.service.MaintainAbarbeitungService;
import org.springblade.modules.repair.vo.FromPlanVO;
import org.springblade.modules.repair.vo.PlanAbarbeitungDetailVO;
import org.springblade.modules.repair.vo.PlanAbarbeitungPageVO;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

/**
 * @Date 10:36 2025/4/9
 * @Description {
 *   评分问题
 * }
 * @Author lsay
 **/
@AllArgsConstructor
@RestController
@RequestMapping("/maintain/abarbeitung")
public class MaintainAbarbeitungController {

	private final MaintainAbarbeitungService abarbeitungService;

	/**
	 * @Author lsay
	 * @Description {
	 *   整改工单分页
	 * }
	 * @Date 16:40 2025/4/10
	 * @Param
	 * @return 成功与否
	 **/
	@GetMapping("/page")
	public R<IPage<PlanAbarbeitungPageVO>> selectPage(PlanAbarbeitungSearchDTO searchDTO, Query query){
		return R.data(abarbeitungService.selectPage(searchDTO,Condition.getPage(query)));
	}

	/**
	 * @Author lsay
	 * @Description {
	 *   获取整改工单页面状态统计
	 * }
	 * @Date 13:49 2025/4/14
	 * @Param
	 * @return 工单各状态统计
	 **/
	@GetMapping("/page/count")
	public R<Map<String,Object>> selectPageCount(){
		return R.data(abarbeitungService.selectPageCount());
	}

	/**
	 * @Author lsay
	 * @Description {
	 *   整改工单详情
	 * }
	 * @Date 13:49 2025/4/14
	 * @Param
	 * @return 整改工单详情
	 **/
	@GetMapping("/detail")
	public R<PlanAbarbeitungDetailVO> selectDetail(Long planId){
		return R.data(abarbeitungService.selectDetail(planId));
	}

	/**
	 * @Author lsay
	 * @Description {
	 *   整改工单操作记录列表
	 * }
	 * @Date 9:30 2025/4/17
	 * @Param
	 * @return 整改工单操作记录列表
	 **/
	@GetMapping("/record/list")
	public R<List<MaintainAbarbeitungRecord>> recordList(Long planId){
		return R.data(abarbeitungService.recordList(planId));
	}

	/**
	 * @Author lsay
	 * @Description {
	 *   整改工单来源工单
	 * }
	 * @Date 9:30 2025/4/17
	 * @Param
	 * @return 整改工单来源工单
	 **/
	@GetMapping("/from/plan")
	public R<List<FromPlanVO>> fromPlan(Long planId){
		return R.data(abarbeitungService.fromPlan(planId));
	}

	/**
	 * @Author lsay
	 * @Description {
	 *   整改工单 完成
	 * }
	 * @Date 10:57 2025/4/22
	 * @Param
	 * @return 成功与否
	 **/
	@PostMapping("/finish")
	public R<Boolean> finish(@RequestBody MaintainAbarbeitungDetail detail){
		return R.data(abarbeitungService.finish(detail));
	}

}
